package note_002;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.List;

/**
 * 利用Dom4J读取xml文件
 * SAXReader 提供了读取XML的API方法
 * read(文件) 读取结果是一个Document对象
 * 简称 doc 对象，doc对象内部封装了全部
 * 解析以后的XML数据.
 */
public class day16 {
    public static void main(String[] args) throws DocumentException {
        /** SAXReader 提供了读取XML的API方法 */
        File file = new File("demo.xml");
        SAXReader reader = new SAXReader();
        Document doc = reader.read(file);
        // doc.asXml(): 输出读取的结果
        System.out.println(doc.asXML());
        System.out.println("------------------下一位---------------------");
        /**
         * 读取根元素的方法:
         * doc.getRootElement(): 返回唯一的根元素.
         * Root 根
         * Element  元素
         */
        Element root = doc.getRootElement();
        System.out.println(root.asXML());
        System.out.println("------------------下一位---------------------");
        /**
         * 获取指定名字的第一个子元素:
         * element():
         * 例如:
         * books -> demo
         *
         */
        Element demo = root.element("demo");
        System.out.println(demo.asXML());
        System.out.println("------------------下一位---------------------");
        /**
         * 获取元素中的文本信息:
         *          将元素包裹的全部文字读取到
         *          一个字符串中,元素中包含文字就返回字符串,
         *          如果元素没有文字,就返回空字符串.
         */
        String text = demo.getText();
        System.out.println(text);
        System.out.println("------------------下一位---------------------");
        /**
         * 获取元素文本信息,同时去除前后的空白:
         */
        text = demo.getTextTrim();//相当于text = demo.getText().Trim();
        System.out.println(text);
        System.out.println("------------------下一位---------------------");

        /*练习获取：获取文本< 18岁给我一个姑娘 >*/
        Element book = root.element("book");
        Element name1 = book.element("name");
        String text1 = name1.getTextTrim();
        System.out.println(text1);
        System.out.println("------------------下一位---------------------");

        /**
         * 获取一个元素的一组子元素:
         * e.elements():获取全部子元素,如果没有子元素返回空集合.
         * e.elements(元素名称):获取全部指定名称的子元素.
         */
        List<Element> list = root.elements();
        List<Element> list1 = root.elements("book");
        list.forEach(e-> System.out.println(e.asXML()));
        System.out.println("------------------下一位---------------------");
        list1.forEach(e-> System.out.println(e.asXML()));
        System.out.println("------------------下一位---------------------");
        /**
         * 输出全部书的书名: 输出元素中的文本(内容)
         */
        list1.forEach(e-> System.out.println(e.element("name").getTextTrim()));
        System.out.println("------------------下一位---------------------");
        list1.forEach(e-> System.out.println(e.element("author").getTextTrim()));
        System.out.println("------------------下一位---------------------");
        /**
         * Dom4j: 提供了直接获取子元素中文本的方法.
         * e.elementTextTrim(元素名):
         *          等价于
         * e.element(元素名).getTextTrim():
         */
        list1.forEach(e-> System.out.println(e.elementTextTrim("name")));
        System.out.println("------------------下一位---------------------");
        /**
         * 元素上包含读取元素属性的方法
         * e.attributeValue():
         * attribute: 属性
         * Value: 值,价值
         *
         * 输出所有书的ID属性
         */
        list1.forEach(e-> System.out.println(e.attributeValue("id")));
        System.out.println("------------------下一位---------------------");




    }
}
